Linux开发

推荐列表 站点导航

当前位置:首页 > 服务器技术 > Linux开发 >

通过Java实现Linux系统下grep指令的功能

来源:互联网  作者:网友投稿  发布时间:2021-01-06 17:05
在Linux系统下grep指令常见的使用方式有如下两种: 1.grep pattern files 搜索 files 中匹配 pattern 的内容 2.grep -r pattern dir 递...

在Linux系统下grep指令常见的使用方式有如下两种: 1.grep pattern files 搜索 files 中匹配 pattern 的内容 2.grep -r pattern dir 递归搜索 dir 中匹配 pattern 的内容 现有如下方法可实现在Windows系统下通过Java代码实现与第一种使用方法相同的功能: import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.CharBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; public class Grep { private static Charset charset = Charset.forName(utf-8); private static CharsetDecoder decoder = charset.newDecoder(); private static Pattern linePattern = Pattern.compile(.*\r?\n); private static Pattern pattern; public static void main(String[] args) { if (args.length 2) { System.err.println(Usage : java Grep pattern file...); return ; } compile(args[0]); for (int i = 1; i args.length; i++) { File f = new File(args[i]); try { grep(f); } catch (IOException e) { System.err.println(f + : + e); } } } private static void grep(File f) throws IOException { //取得 FileChannel FileInputStream fis = new FileInputStream(f); FileChannel fc = fis.getChannel(); // Get the files size and then map it into memory int size = (int) fc.size(); MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY,在Windows系统下通过Java代码实现了与Linux系统写grep命令第一种使用方法相同的功能,执行java Grep abcd 1.txt 2.txt 3.txt 4.txt 运行效果如下: 至此, CharBuffer cb) { Matcher lm = linePattern.matcher(cb); //line matcher Matcher pm = null; //pattern matcher int lines = 0; while (lm.find()) { lines++; CharSequence curLineCs = lm.group();//the current line if (pm == null) { pm = pattern.matcher(curLineCs); } else { pm.reset(curLineCs); } if (pm.find()) { System.out.println(f + + lines + : + curLineCs); } if (lm.end() == cb.limit()) { //文件最后 break; } } } private static void compile(String pat) { try { pattern = Pattern.compile(pat); } catch (PatternSyntaxException e) { System.err.println(e.getMessage()); System.exit(1); } } } 执行java Grep abcd 1.txt 运行效果图如下: 也可以同时搜索多个文件, cb); fc.close(); } private static void grep(File f, size); //把 字节buffer decode 成 charBuffer CharBuffer cb = decoder.decode(bb); grep(f, 。

0,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/server/kaifa/11521.shtml

相关文章
Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

通过Java实现Linux系统下grep指令的功能

2021-01-06 编辑:网友投稿

在Linux系统下grep指令常见的使用方式有如下两种: 1.grep pattern files 搜索 files 中匹配 pattern 的内容 2.grep -r pattern dir 递归搜索 dir 中匹配 pattern 的内容 现有如下方法可实现在Windows系统下通过Java代码实现与第一种使用方法相同的功能: import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.CharBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; public class Grep { private static Charset charset = Charset.forName(utf-8); private static CharsetDecoder decoder = charset.newDecoder(); private static Pattern linePattern = Pattern.compile(.*\r?\n); private static Pattern pattern; public static void main(String[] args) { if (args.length 2) { System.err.println(Usage : java Grep pattern file...); return ; } compile(args[0]); for (int i = 1; i args.length; i++) { File f = new File(args[i]); try { grep(f); } catch (IOException e) { System.err.println(f + : + e); } } } private static void grep(File f) throws IOException { //取得 FileChannel FileInputStream fis = new FileInputStream(f); FileChannel fc = fis.getChannel(); // Get the files size and then map it into memory int size = (int) fc.size(); MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY,在Windows系统下通过Java代码实现了与Linux系统写grep命令第一种使用方法相同的功能,执行java Grep abcd 1.txt 2.txt 3.txt 4.txt 运行效果如下: 至此, CharBuffer cb) { Matcher lm = linePattern.matcher(cb); //line matcher Matcher pm = null; //pattern matcher int lines = 0; while (lm.find()) { lines++; CharSequence curLineCs = lm.group();//the current line if (pm == null) { pm = pattern.matcher(curLineCs); } else { pm.reset(curLineCs); } if (pm.find()) { System.out.println(f + + lines + : + curLineCs); } if (lm.end() == cb.limit()) { //文件最后 break; } } } private static void compile(String pat) { try { pattern = Pattern.compile(pat); } catch (PatternSyntaxException e) { System.err.println(e.getMessage()); System.exit(1); } } } 执行java Grep abcd 1.txt 运行效果图如下: 也可以同时搜索多个文件, cb); fc.close(); } private static void grep(File f, size); //把 字节buffer decode 成 charBuffer CharBuffer cb = decoder.decode(bb); grep(f, 。

0,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/server/kaifa/11521.shtml

相关文章

风云图片

推荐阅读

返回Linux开发频道首页